/**
*    Copyright (C) 2008  Chase Kernan 
*    chase.kernan@gmail.com
*
*    This program is free software: you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation, either version 3 of the License, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program.  If not, see <http://www.gnu.org/licenses/>.
* 
*/

package com.chasekernan.hxnova.core.components;

import com.chasekernan.hxnova.core.components.ComponentSet;
import haxe.xml.Check;

/**
    Allows for any computer that increase initiative and/or accuracy.
**/
class Computer extends Component{
    
    public static var ACCURACY_MIN : Float = 0.0;
    public static var ACCURACY_MAX : Float = 100.0;
    
    public var initiative(default, setInitiative) : Int;
    private function setInitiative(i : Int) : Int {if(i < 0) {throw "initiative must be >= 0.";} else {initiative = i;} return initiative;}
    
    public var accuracy(default, setAcc) : Float;
    private function setAcc(a : Float) : Float {
        if(a < ACCURACY_MIN || a > ACCURACY_MAX) {
            throw "Accuracy must be between " + ACCURACY_MIN + " and " 
                    + ACCURACY_MAX + "."; 
        } else accuracy = a;
        
        return accuracy;
    }
    
    public function new(name : String, ?initiative : Int, ?accuracy : Float) {
        super(name);
        setAcc(if(accuracy == null) 0.01 else accuracy);
        setInitiative(initiative);
    }
    
    public static function writeToXml(c : Computer) : Xml {
        return Component.writeToXml(c);
    }
    
    public static function readFromXml(xml : Xml) : Computer {
        try {
            var c = new Computer("");
            //Check.checkNode(xml, c.getRules());
            c.generateFromComponentXml(xml, c);
            
            return c;
        } catch (e : Dynamic) {
            throw 'Bad xml file for computer: ' + e;
        }
    }
}